<?xml version='1.0' encoding="utf-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html lang="en" xml:lang="en" xmlns="http://www.w3.org/1999/xhtml">
  <head>
    <link href="cpip.css" rel="stylesheet" type="text/css" />
    <title>File: /Users/paulross/dev/linux/linux-3.13/include/linux/hardirq.h</title>
  </head>
  <body>
    <h1>File: /Users/paulross/dev/linux/linux-3.13/include/linux/hardirq.h</h1>
    <p>Green shading in the line number column
means the source is part of the translation unit, red means it is conditionally excluded.
Highlighted line numbers link to the translation unit page. Highlighted macros link to
the macro page.</p>
    <pre><a name="1" /><span class="True">       1:</span> <span class="f">#</span><span class="n">ifndef</span> <a href="cpu.c_macros_noref.html#_TElOVVhfSEFSRElSUV9IXzA_"><span class="b">LINUX_HARDIRQ_H</span></a>
<a name="2" /><span class="True">       2:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_noref.html#_TElOVVhfSEFSRElSUV9IXzA_"><span class="b">LINUX_HARDIRQ_H</span></a>
<a name="3" /><span class="True">       3:</span> 
<a name="4" /><span class="True">       4:</span> <span class="f">#</span><span class="n">include</span> <span class="f">&lt;</span><span class="b">linux</span><span class="f">/</span><span class="b">preempt_mask</span><span class="f">.</span><span class="b">h</span><span class="f">&gt;</span>
<a name="5" /><span class="True">       5:</span> <span class="f">#</span><span class="n">include</span> <span class="f">&lt;</span><span class="b">linux</span><span class="f">/</span><span class="b">lockdep</span><span class="f">.</span><span class="b">h</span><span class="f">&gt;</span>
<a name="6" /><span class="True">       6:</span> <span class="f">#</span><span class="n">include</span> <span class="f">&lt;</span><span class="b">linux</span><span class="f">/</span><span class="b">ftrace_irq</span><span class="f">.</span><span class="b">h</span><span class="f">&gt;</span>
<a name="7" /><span class="True">       7:</span> <span class="f">#</span><span class="n">include</span> <span class="f">&lt;</span><span class="b">linux</span><span class="f">/</span><span class="b">vtime</span><span class="f">.</span><span class="b">h</span><span class="f">&gt;</span>
<a name="8" /><span class="True">       8:</span> 
<a name="9" /><span class="True">       9:</span> 
<a name="10" /><span class="True">      10:</span> <span class="m">extern</span> <span class="m">void</span> <span class="b">synchronize_irq</span><span class="f">(</span><span class="m">unsigned</span> <span class="m">int</span> <span class="b">irq</span><span class="f">)</span><span class="f">;</span>
<a name="11" /><span class="True">      11:</span> 
<a name="12" /><span class="False">      12:</span> <span class="f">#</span><span class="n">if</span> <span class="b">defined</span><span class="f">(</span><span class="b">CONFIG_TINY_RCU</span><span class="f">)</span>
<a name="13" /><span class="False">      13:</span> 
<a name="14" /><span class="False">      14:</span> <span class="m">static</span> <span class="m">inline</span> <span class="m">void</span> <span class="b">rcu_nmi_enter</span><span class="f">(</span><span class="m">void</span><span class="f">)</span>
<a name="15" /><span class="False">      15:</span> <span class="f">{</span>
<a name="16" /><span class="False">      16:</span> <span class="f">}</span>
<a name="17" /><span class="False">      17:</span> 
<a name="18" /><span class="False">      18:</span> <span class="m">static</span> <span class="m">inline</span> <span class="m">void</span> <span class="b">rcu_nmi_exit</span><span class="f">(</span><span class="m">void</span><span class="f">)</span>
<a name="19" /><span class="False">      19:</span> <span class="f">{</span>
<a name="20" /><span class="False">      20:</span> <span class="f">}</span>
<a name="21" /><span class="False">      21:</span> 
<a name="22" /><span class="True">      22:</span> <span class="f">#</span><span class="n">else</span>
<a name="23" /><span class="True">      23:</span> <span class="m">extern</span> <span class="m">void</span> <span class="b">rcu_nmi_enter</span><span class="f">(</span><span class="m">void</span><span class="f">)</span><span class="f">;</span>
<a name="24" /><span class="True">      24:</span> <span class="m">extern</span> <span class="m">void</span> <span class="b">rcu_nmi_exit</span><span class="f">(</span><span class="m">void</span><span class="f">)</span><span class="f">;</span>
<a name="25" /><span class="True">      25:</span> <span class="f">#</span><span class="n">endif</span>
<a name="26" /><span class="True">      26:</span> 
<a name="27" /><span class="True">      27:</span> <span class="k">/*</span>
<a name="28" /><span class="True">      28:</span> <span class="k"> * It is safe to do non-atomic ops on -&gt;hardirq_context,</span>
<a name="29" /><span class="True">      29:</span> <span class="k"> * because NMI handlers may not preempt and the ops are</span>
<a name="30" /><span class="True">      30:</span> <span class="k"> * always balanced, so the interrupted value of -&gt;hardirq_context</span>
<a name="31" /><span class="True">      31:</span> <span class="k"> * will always be restored.</span>
<a name="32" /><span class="True">      32:</span> <span class="k"> */</span>
<a name="33" /><span class="True">      33:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_noref.html#_X19pcnFfZW50ZXJfMA__"><span class="b">__irq_enter</span></a><span class="f">(</span><span class="f">)</span>                    \
<a name="34" /><span class="True">      34:</span>     <span class="m">do</span> <span class="f">{</span>                        \
<a name="35" /><span class="True">      35:</span>         <span class="b">account_irq_enter_time</span><span class="f">(</span><a href="cpu.c_macros_ref.html#_Y3VycmVudF8w"><span class="b">current</span></a><span class="f">)</span><span class="f">;</span>    \
<a name="36" /><span class="True">      36:</span>         <a href="cpu.c_macros_noref.html#_cHJlZW1wdF9jb3VudF9hZGRfMA__"><span class="b">preempt_count_add</span></a><span class="f">(</span><a href="cpu.c_macros_noref.html#_SEFSRElSUV9PRkZTRVRfMA__"><span class="b">HARDIRQ_OFFSET</span></a><span class="f">)</span><span class="f">;</span>    \
<a name="37" /><span class="True">      37:</span>         <a href="cpu.c_macros_noref.html#_dHJhY2VfaGFyZGlycV9lbnRlcl8w"><span class="b">trace_hardirq_enter</span></a><span class="f">(</span><span class="f">)</span><span class="f">;</span>            \
<a name="38" /><span class="True">      38:</span>     <span class="f">}</span> <span class="m">while</span> <span class="f">(</span><span class="c">0</span><span class="f">)</span>
<a name="39" /><span class="True">      39:</span> 
<a name="40" /><span class="True">      40:</span> <span class="k">/*</span>
<a name="41" /><span class="True">      41:</span> <span class="k"> * Enter irq context (on NO_HZ, update jiffies):</span>
<a name="42" /><span class="True">      42:</span> <span class="k"> */</span>
<a name="43" /><span class="True">      43:</span> <span class="m">extern</span> <span class="m">void</span> <span class="b">irq_enter</span><span class="f">(</span><span class="m">void</span><span class="f">)</span><span class="f">;</span>
<a name="44" /><span class="True">      44:</span> 
<a name="45" /><span class="True">      45:</span> <span class="k">/*</span>
<a name="46" /><span class="True">      46:</span> <span class="k"> * Exit irq context without processing softirqs:</span>
<a name="47" /><span class="True">      47:</span> <span class="k"> */</span>
<a name="48" /><span class="True">      48:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_noref.html#_X19pcnFfZXhpdF8w"><span class="b">__irq_exit</span></a><span class="f">(</span><span class="f">)</span>                    \
<a name="49" /><span class="True">      49:</span>     <span class="m">do</span> <span class="f">{</span>                        \
<a name="50" /><span class="True">      50:</span>         <a href="cpu.c_macros_noref.html#_dHJhY2VfaGFyZGlycV9leGl0XzA_"><span class="b">trace_hardirq_exit</span></a><span class="f">(</span><span class="f">)</span><span class="f">;</span>            \
<a name="51" /><span class="True">      51:</span>         <span class="b">account_irq_exit_time</span><span class="f">(</span><a href="cpu.c_macros_ref.html#_Y3VycmVudF8w"><span class="b">current</span></a><span class="f">)</span><span class="f">;</span>        \
<a name="52" /><span class="True">      52:</span>         <a href="cpu.c_macros_noref.html#_cHJlZW1wdF9jb3VudF9zdWJfMA__"><span class="b">preempt_count_sub</span></a><span class="f">(</span><a href="cpu.c_macros_noref.html#_SEFSRElSUV9PRkZTRVRfMA__"><span class="b">HARDIRQ_OFFSET</span></a><span class="f">)</span><span class="f">;</span>    \
<a name="53" /><span class="True">      53:</span>     <span class="f">}</span> <span class="m">while</span> <span class="f">(</span><span class="c">0</span><span class="f">)</span>
<a name="54" /><span class="True">      54:</span> 
<a name="55" /><span class="True">      55:</span> <span class="k">/*</span>
<a name="56" /><span class="True">      56:</span> <span class="k"> * Exit irq context and process softirqs if needed:</span>
<a name="57" /><span class="True">      57:</span> <span class="k"> */</span>
<a name="58" /><span class="True">      58:</span> <span class="m">extern</span> <span class="m">void</span> <span class="b">irq_exit</span><span class="f">(</span><span class="m">void</span><span class="f">)</span><span class="f">;</span>
<a name="59" /><span class="True">      59:</span> 
<a name="60" /><span class="True">      60:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_noref.html#_bm1pX2VudGVyXzA_"><span class="b">nmi_enter</span></a><span class="f">(</span><span class="f">)</span>                        \
<a name="61" /><span class="True">      61:</span>     <span class="m">do</span> <span class="f">{</span>                            \
<a name="62" /><span class="True">      62:</span>         <span class="b">lockdep_off</span><span class="f">(</span><span class="f">)</span><span class="f">;</span>                    \
<a name="63" /><span class="True">      63:</span>         <span class="b">ftrace_nmi_enter</span><span class="f">(</span><span class="f">)</span><span class="f">;</span>                \
<a name="64" /><span class="True">      64:</span>         <a href="cpu.c_macros_ref.html#_QlVHX09OXzA_"><span class="b">BUG_ON</span></a><span class="f">(</span><a href="cpu.c_macros_noref.html#_aW5fbm1pXzA_"><span class="b">in_nmi</span></a><span class="f">(</span><span class="f">)</span><span class="f">)</span><span class="f">;</span>                \
<a name="65" /><span class="True">      65:</span>         <a href="cpu.c_macros_noref.html#_cHJlZW1wdF9jb3VudF9hZGRfMA__"><span class="b">preempt_count_add</span></a><span class="f">(</span><a href="cpu.c_macros_noref.html#_Tk1JX09GRlNFVF8w"><span class="b">NMI_OFFSET</span></a> <span class="f">+</span> <a href="cpu.c_macros_noref.html#_SEFSRElSUV9PRkZTRVRfMA__"><span class="b">HARDIRQ_OFFSET</span></a><span class="f">)</span><span class="f">;</span>    \
<a name="66" /><span class="True">      66:</span>         <span class="b">rcu_nmi_enter</span><span class="f">(</span><span class="f">)</span><span class="f">;</span>                \
<a name="67" /><span class="True">      67:</span>         <a href="cpu.c_macros_noref.html#_dHJhY2VfaGFyZGlycV9lbnRlcl8w"><span class="b">trace_hardirq_enter</span></a><span class="f">(</span><span class="f">)</span><span class="f">;</span>                \
<a name="68" /><span class="True">      68:</span>     <span class="f">}</span> <span class="m">while</span> <span class="f">(</span><span class="c">0</span><span class="f">)</span>
<a name="69" /><span class="True">      69:</span> 
<a name="70" /><span class="True">      70:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_noref.html#_bm1pX2V4aXRfMA__"><span class="b">nmi_exit</span></a><span class="f">(</span><span class="f">)</span>                        \
<a name="71" /><span class="True">      71:</span>     <span class="m">do</span> <span class="f">{</span>                            \
<a name="72" /><span class="True">      72:</span>         <a href="cpu.c_macros_noref.html#_dHJhY2VfaGFyZGlycV9leGl0XzA_"><span class="b">trace_hardirq_exit</span></a><span class="f">(</span><span class="f">)</span><span class="f">;</span>                \
<a name="73" /><span class="True">      73:</span>         <span class="b">rcu_nmi_exit</span><span class="f">(</span><span class="f">)</span><span class="f">;</span>                    \
<a name="74" /><span class="True">      74:</span>         <a href="cpu.c_macros_ref.html#_QlVHX09OXzA_"><span class="b">BUG_ON</span></a><span class="f">(</span><span class="f">!</span><a href="cpu.c_macros_noref.html#_aW5fbm1pXzA_"><span class="b">in_nmi</span></a><span class="f">(</span><span class="f">)</span><span class="f">)</span><span class="f">;</span>                \
<a name="75" /><span class="True">      75:</span>         <a href="cpu.c_macros_noref.html#_cHJlZW1wdF9jb3VudF9zdWJfMA__"><span class="b">preempt_count_sub</span></a><span class="f">(</span><a href="cpu.c_macros_noref.html#_Tk1JX09GRlNFVF8w"><span class="b">NMI_OFFSET</span></a> <span class="f">+</span> <a href="cpu.c_macros_noref.html#_SEFSRElSUV9PRkZTRVRfMA__"><span class="b">HARDIRQ_OFFSET</span></a><span class="f">)</span><span class="f">;</span>    \
<a name="76" /><span class="True">      76:</span>         <span class="b">ftrace_nmi_exit</span><span class="f">(</span><span class="f">)</span><span class="f">;</span>                \
<a name="77" /><span class="True">      77:</span>         <span class="b">lockdep_on</span><span class="f">(</span><span class="f">)</span><span class="f">;</span>                    \
<a name="78" /><span class="True">      78:</span>     <span class="f">}</span> <span class="m">while</span> <span class="f">(</span><span class="c">0</span><span class="f">)</span>
<a name="79" /><span class="True">      79:</span> 
<a name="80" /><span class="True">      80:</span> <span class="f">#</span><span class="n">endif</span> <span class="k">/* LINUX_HARDIRQ_H */</span>
<a name="81" /><span class="True">      81:</span> </pre>
  </body>
</html>
